package com.silence.gmall.base;

import cn.hutool.core.convert.Convert;
import com.google.common.collect.Lists;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

/**
 * @Author silence
 * @Email 792245022@qq.com
 * @Date 2025-06-11 14:50
 * @Description 分页表数据信息
 */
@Data
@NoArgsConstructor
public class TableDataInfo<T> implements Serializable {

    /**
     * 序列号
     */
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 页码
     */
    private Long pageNum;

    /**
     * 每页数量
     */
    private Long pageSize;

    /**
     * 当前页
     */
    private Long current;

    /**
     * 数量
     */
    private Long size;

    /**
     * 总记录数
     */
    private Long total;

    /**
     * 内容
     */
    private List<T> records;

    /**
     * 空集合
     */
    public static final TableDataInfo<?> EMPTY = new TableDataInfo<>(Lists.newArrayList(), 0L);

    /**
     * 构造器
     *
     * @param list  集合
     * @param total 总数
     */
    public TableDataInfo(List<T> list, long total) {
        this.records = list;
        this.total = total;
    }

    /**
     * 转换集合内容类型
     *
     * @param clazz 类
     * @param <E>   泛型
     * @return 转换后的集合
     */
    public <E> TableDataInfo<E> convertTo(Class<E> clazz) {
        List<E> eList = Convert.toList(clazz, this.records);
        TableDataInfo<E> tableDataInfo = new TableDataInfo<>();
        tableDataInfo.setRecords(eList);
        tableDataInfo.setPageNum(this.pageNum);
        tableDataInfo.setPageSize(this.pageSize);
        tableDataInfo.setCurrent(this.current);
        tableDataInfo.setSize(this.size);
        tableDataInfo.setTotal(this.total);
        return tableDataInfo;
    }
}
